// 题目功能简述
// 给定一个 n 行 m 列的整数矩阵。
// 统计有多少个 2×2 的小方格（左上角为 (i, j)），满足：
// a[i][j] * a[i+1][j+1] == a[i+1][j] * a[i][j+1]
// 输出满足条件的小方格数量。

// 关键点说明
// a[i][j] * a[i+1][j+1] == a[i+1][j] * a[i][j+1]
// 这是判断一个 2×2 方格的对角线乘积是否相等。
// 只统计左上角在 (1,1) 到 (n-1,m-1) 的所有 2×2 方格。
// 最后输出满足条件的方格数量。

#include<bits/stdc++.h>
using namespace std;
const int N = 505;
int n, m;
int a[N][N];
int ans;

int main() {
    scanf("%d%d", &n, &m);
    assert(1 <= n && n <= 500 && 1 <= m && m <= 500);

    // 读入矩阵
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++) {
            scanf("%d", &a[i][j]);
            assert(-100 <= a[i][j] && a[i][j] <= 100);
        }

    // 枚举所有2x2小方格的左上角
    for (int i = 1; i < n; i++)
        for (int j = 1; j < m; j++)
            // 判断对角乘积是否相等
            if (a[i][j] * a[i + 1][j + 1] == a[i + 1][j] * a[i][j + 1])
                ans++;

    printf("%d\n", ans);
    return 0;
}